/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦]
 * 
 * https://zhiqim.org/project/zhiqim_framework/zhiqim_httpd.htm
 *
 * Zhiqim Httpd is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.httpd.context.extend;

import org.zhiqim.httpd.HttpRequest;
import org.zhiqim.httpd.context.core.Action;


/**
 * 包括一个View和一个Exec的Action，常用于页面和处理合并到一个Action
 * 
 * @version v1.0.0 @author zouzhigang 2014-3-21 新建与整理
 */
public abstract class ViewExecAction implements Action
{
    /** 设置为final，防止子类重写 */
    public final void execute(HttpRequest request) throws Exception
    {
        String method = request.getExecuteMethod();
        if(EXEC.equalsIgnoreCase(method))
        {//处理，先把验证数据放入，再验证，失败退出，成功清除验证后执行
            validate(request);
            if (!request.chkValidate())
            {
                request.returnHistory();
                return;
            }
            
            request.clearValidate();
            exec(request);
        }
        else
        {
            request.setResponsePrivateCache();
            request.setAlertMsg(null);
            validate(request);//增加验证到forward
            view(request);
        }
    }

    /**
     * 增加验证,默认通过,子类可重写该方法
     * 
     * @param forward ActionForward
     */
    protected void validate(HttpRequest request) throws Exception
    {
    }
    
    /** view方法，由子类实现 */
    protected abstract void view(HttpRequest request) throws Exception;
    
    /** exec方法，由子类实现 */
    protected abstract void exec(HttpRequest request) throws Exception;
}
